/**
 * 该模板主要作用：增强路由本身的 push 和 replace 方法
 */
import VueRouter from 'vue-router'

// 增强路由本身的 push 和 replace 方法
// const originPush = VueRouter.prototype.push

// 增强 push 方法
// 增强的原因、目的：不想跳转的时候写第二个参数和第三个参数
// VueRouter.prototype.push = function (path, successCb, errorCb) {
//   if (successCb || errorCb) {
//     originPush.call(this, path, successCb, errorCb)
//   } else {
//     // originPush(path)
//     originPush.call(this, path).catch(() => {})
//   }
// }

// 增强路由本身的 push 和 replace 方法
const methods = ['push', 'replace']

// 对 methods 进行遍历，每个数组中每一项都进行增强
methods.forEach((method) => {
  // 对路由提供的方法进行逐个缓存
  const originPush = VueRouter.prototype[method]

  VueRouter.prototype[method] = function (path, successCb, errorCb) {
    // 第一种情况，用户只传一个 successCb  → true || false → 执行 true，不在执行第三个
    // 第二个情况，用户只传一个 errorCb    → false || true → 第一个是 false, 执行 true
    // 第三种情况，successCb 、errorCb 都传递  → true || true → true
    if (successCb || errorCb) {
      originPush.call(this, path, successCb, errorCb)
    } else {
      originPush.call(this, path).catch(() => {})
    }
  }
})
